草庐IT

c++ 除以 0

全部标签

c++ - 整数 float 除以自身是否保证为 1.f?

如果我写:intx=/*anynon-zerointegervalue*/;floaty=x;floatz=y/y;z是否保证正好是1.f? 最佳答案 如果您的C++实现使用IEEE754,那么可以,这是有保证的。(除法运算符需要返回可能的最佳浮点值)。只有y/y的异常(exception),一般来说,不是1.f的情况是y是NaN、+Inf、-Inf、0.f和-0。f,或者如果你在一个平台上int太宽以至于它的某些实例不能在没有floatfloat中表示被设置为+Inf或-Inf1。撇开最后一点,在您的情况下,这意味着intx=0;

c++ - 无论结果如何,支持除以零的最快整数除法是什么?

总结:我正在寻找最快的计算方法(int)x/(int)yy==0没有异常。相反,我只想要一个任意的结果。背景:在编码图像处理算法时,我经常需要除以(累积的)alpha值。最简单的变体是带有整数运算的纯C代码。我的问题是,对于alpha==0的结果像素,我通常会得到除以零的错误。然而,这正是结果无关紧要的像素:我不关心alpha==0的像素的颜色值。详情:我正在寻找类似的东西:result=(y==0)?0:x/y;或result=x/MAX(y,1);x和y是正整数。代码在嵌套循环中执行了很多次,所以我正在寻找一种方法来摆脱条件分支。当y不超过字节范围时,我对解决方案感到满意unsig

c++ - 计算可能溢出的整数运算的最安全和最有效的方法

假设我们有2个常量A&B和一个变量i,都是64位整数。我们要计算一个简单的常见算术运算,例如:i*A/B(1)为了简化问题,我们假设变量i总是在[INT64_MIN*B/A,INT64_MAX*B/A]范围内,所以最后算术运算(1)的结果不会溢出(即:fits在[INT64_MIN,INT64_MAX]范围内)。另外,i被认为更可能在friendly范围Range1=[INT64_MIN/A,INT64_MAX/A](即:接近0),但是i可能(不太可能)超出此范围。在第一种情况下,i*A的简单整数计算不会溢出(这就是我们称范围friendly的原因);在后一种情况下,i*A的简单整数计

c++ - 计算可能溢出的整数运算的最安全和最有效的方法

假设我们有2个常量A&B和一个变量i,都是64位整数。我们要计算一个简单的常见算术运算,例如:i*A/B(1)为了简化问题,我们假设变量i总是在[INT64_MIN*B/A,INT64_MAX*B/A]范围内,所以最后算术运算(1)的结果不会溢出(即:fits在[INT64_MIN,INT64_MAX]范围内)。另外,i被认为更可能在friendly范围Range1=[INT64_MIN/A,INT64_MAX/A](即:接近0),但是i可能(不太可能)超出此范围。在第一种情况下,i*A的简单整数计算不会溢出(这就是我们称范围friendly的原因);在后一种情况下,i*A的简单整数计

c++ - 为什么 int i=400*400/400 给出结果 72,数据类型是循环的?

我认为首先400*400=160000从0开始到160000转换为28928int类型的循环时间(比如sizeof(int)=2个字节)假设它像:然后28928除以400,其下限为72,结果因变量类型而异。我的假设是正确的还是有其他解释? 最佳答案 假设您使用的编译器已经够老了,而int只有16位。那么是的,你的分析是正确的。*400*400=160000//Integeroverflowwrap-around.160000%2^16=28928//IntegerDivision28928/400=72(roundeddown)当然

c++ - 为什么 int i=400*400/400 给出结果 72,数据类型是循环的?

我认为首先400*400=160000从0开始到160000转换为28928int类型的循环时间(比如sizeof(int)=2个字节)假设它像:然后28928除以400,其下限为72,结果因变量类型而异。我的假设是正确的还是有其他解释? 最佳答案 假设您使用的编译器已经够老了,而int只有16位。那么是的,你的分析是正确的。*400*400=160000//Integeroverflowwrap-around.160000%2^16=28928//IntegerDivision28928/400=72(roundeddown)当然

c++ - 分支预测和除以零

我正在编写如下所示的代码...if(denominator==0){returnfalse;}intresult=value/denominator;...当我想到CPU中的分支行为时。https://stackoverflow.com/a/11227902/620863这个答案表示CPU将尝试正确猜测分支将走向哪条路,并且只有在发现它错误地猜测分支时才停止该分支。但是如果CPU错误地预测了上面的分支,它会在下面的指令中除以零。但这并没有发生,我想知道为什么?CPU是否实际上执行了除以零并在执行任何操作之前等待查看分支是否正确,或者它是否可以告诉它在这些情况下不应该继续?怎么回事?

c++ - 分支预测和除以零

我正在编写如下所示的代码...if(denominator==0){returnfalse;}intresult=value/denominator;...当我想到CPU中的分支行为时。https://stackoverflow.com/a/11227902/620863这个答案表示CPU将尝试正确猜测分支将走向哪条路,并且只有在发现它错误地猜测分支时才停止该分支。但是如果CPU错误地预测了上面的分支,它会在下面的指令中除以零。但这并没有发生,我想知道为什么?CPU是否实际上执行了除以零并在执行任何操作之前等待查看分支是否正确,或者它是否可以告诉它在这些情况下不应该继续?怎么回事?

c++ - 找到多边形的质心?

为了获得中心,我尝试了,对于每个顶点,将其加到总数中,然后除以顶点数。我也试过找到最上面,最下面->得到中点...找到最左边,最右边,找到中点。这两个都没有返回完美的中心,因为我依靠中心来缩放多边形。我想缩放我的多边形,所以我可以在它们周围设置一个边框。鉴于多边形可能是凹的、凸的并且有许多不同长度的边,找到多边形质心的最佳方法是什么? 最佳答案 公式给出here对于按其在多边形周长上出现次数排序的顶点。对于那些难以理解这些公式中的sigma表示法的人,这里有一些C++代码展示了如何进行计算:#includestructPoint2D

c++ - 找到多边形的质心?

为了获得中心,我尝试了,对于每个顶点,将其加到总数中,然后除以顶点数。我也试过找到最上面,最下面->得到中点...找到最左边,最右边,找到中点。这两个都没有返回完美的中心,因为我依靠中心来缩放多边形。我想缩放我的多边形,所以我可以在它们周围设置一个边框。鉴于多边形可能是凹的、凸的并且有许多不同长度的边,找到多边形质心的最佳方法是什么? 最佳答案 公式给出here对于按其在多边形周长上出现次数排序的顶点。对于那些难以理解这些公式中的sigma表示法的人,这里有一些C++代码展示了如何进行计算:#includestructPoint2D